/*
 * LoggerBuffer.h
 *
 *  Created on: Nov 5, 2009
 *      Author: Adailton de Jesus Cerqueira Junior <adailton.junior@gmail.com>
 *
 * LoggerBuffer é uma classe que usa o padrão Double-Checked Locking, ou seja, uma classe singleton para multi-threads.
 * Para acessar a classe utilizamos o método getInstance. Este método retorna a instancia atual do LoggerBuffer,
 * caso ainda não exista, cria uma. O LoggerBuffer é retornado como referencia,
 * então para se ter acesso ao LoggerBuffer devemos criar uma referencia localmente para ele. Exemplo:
 *
 *   LoggerBuffer& loggerBuffer = LoggerBuffer::getInstance();
 *
 * Desta forma toda auteração feita ao LoggerBuffer é passada para a instancia atual.
 */

#ifndef LOGGERBUFFER_H_
#define LOGGERBUFFER_H_

#include <vector>

#include "Logger.h"

class LoggerBuffer
{
    public:
        static LoggerBuffer &getInstance();

        void armazenarLogger(std::string log);
        void imprimirLogger();
        void forceImprimirLogger();

    protected:
        LoggerBuffer();
        LoggerBuffer(LoggerBuffer const & l);
        virtual ~LoggerBuffer();

    private:
        LoggerBuffer& operator=(const LoggerBuffer& m);

    private:
        static std::vector<std::string> mBuffer;
        static LoggerBuffer            *mInstance;
};

#endif /* LOGGERBUFFER_H_ */
